home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
desq5x.zip
/
DESQ5X.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-01-04
|
4KB
|
122 lines
PAGE 80,132
TITLE DESQview TP 5.0 interfaces, Ver 5.X
; DESQ5X.ASM - DESQview interface routines
; by James H. LeMay, CIS 76011,217
; for Eagle Performance Software
; P.O. Box 122237
; Ft. Worth, TX 76121
; These procedures are published in the DESQview users manual and
; have been modified for use for TP 5.0. Note that some of these
; routines are useful for direct screen writing utilities
; like QWIK5X.ARC
; Only uses 95 bytes of code.
DATA SEGMENT WORD PUBLIC
EXTRN In_DV: BYTE ; defaults as FALSE in DESQxx.PAS
DATA ENDS
CODE SEGMENT WORD PUBLIC
ASSUME CS:CODE, DS:DATA
PUBLIC DV_GET_VERSION
PUBLIC DV_GET_VIDEO_BUFFER
PUBLIC DV_PAUSE
PUBLIC DV_BEGIN_CRITICAL
PUBLIC DV_END_CRITICAL
DV_GET_VERSION PROC FAR
; function DV_Get_Version: word;
; Returns in AH/AL the DESQview major/minor version numbers,
; and sets up the In_DV variable for later use.
; Returns 0 in AX if DESQview isn't there.
mov cx,'DE' ; Set CX to 4445h; DX to 5351h
mov dx,'SQ' ; (an invalid date)
mov ax,2B01h ; DOS's set date function
int 21h ; call DOS
cmp al,0FFh ; did DOS see it as invalid?
je NoDV ; if so, DESQview isn't there
xchg ax,bx ; AH=major version; AL=minor version
mov In_DV,1 ; Set In_DV = true
jmp SHORT DVGV_X ;
NoDV: xor ax,ax ; Set AX = false (No DESQview)
mov In_DV,al ; Set In_DV = false (this was left out
; of the publication!)
DVGV_X: ret
DV_GET_VERSION ENDP
VideoSeg EQU [bp+6]
DV_GET_VIDEO_BUFFER PROC FAR
; function DV_Get_Video_Buffer (VideoSeg: word): word;
; Takes the hardware video segment and returns the same
; segment (if DESQview is not present) or DESQview's alternate
; video buffer (in AX). Sets up the In_DV variable for later use.
; Call this instead of DV_GET_VERSION_ if your program writes
; directly to video memory.
; Note: DV keeps the alternate buffer paragraph aligned so only
; the segment is needed.
push bp ; Set turbo's stack frame
mov bp,sp ;
call DV_GET_VERSION ; Returns AX=0 if not in DESQview
mov es,VideoSeg ; Put hardware segment in ES
xor di,di ; Put hardware offset in DI (usually 0)
test ax,ax ; In DV?
jz DVGVB_X ; No, jump.
; Yes, get new buffer segment
mov ah,0FEh ; DV's get buffer function
int 10h ; Returns ES:DI as alternate buffer
DVGVB_X:mov ax,es ; Return correct video buffer
pop bp ; Restore Turbo's BP
ret 2
DV_GET_VIDEO_BUFFER ENDP
API_CALL PROC NEAR
; This local routine takes a program interface function in BS,
; and makes that call to DESQview after swithching onto a stack
; that DESQview provides for your program.
mov ax,101Ah ; The function to switch to DV's stack
int 15h ; DV's software interrupt
mov ax,bx ; Move the desired function to AX
int 15h ; Make that call
mov ax,1025h ; Function to switch off DV's stack
int 15h ; Make that call
ret
API_CALL ENDP
DV_PAUSE PROC FAR
; procedure DV_Pause;
; This procedure gives up the rest of your program's time slice.
mov bx,1000h ; This is the function code
jmp SHORT DV_API ; Finish routine
DV_PAUSE ENDP
DV_BEGIN_CRITICAL PROC FAR
; procedure DV_Begin_Critical;
; This routine tells DESQview not to slice away from your program
; until you make a DV_END_CRITICAL call.
mov bx,101Bh ; This is the function code
jmp SHORT DV_API ; Finish routine
DV_BEGIN_CRITICAL ENDP
DV_END_CRITICAL PROC FAR
; procedure DV_End_Critical;
; This routine tells DESQview that it is all right to slice away
; from your program again.
mov bx,101Ch ; This is the function code
DV_API: cmp In_DV,1 ; Are we in DESQview?
jne DVEC_X ; If not, nothing to do
call API_CALL ; Do it
DVEC_X: ret
DV_END_CRITICAL ENDP
CODE ENDS
END